//go:build ignore

package main

import "fmt"

// defer 语句会将函数推迟到外层函数返回之后执行
// 推迟函数的参数会立即求值,但直到外层函数返回之前都不会被调用(先计算,后返回,很符合并发任务处理)
// defer 堆栈先进后出 FILO
func deferDemo1() {
	defer fmt.Println("world")
	fmt.Println("hello")
}

// defer 堆栈,先进后出
func deferDemo2() {
	fmt.Println("starting counting...")
	for i := 1; i < 10; i++ {
		defer fmt.Println(i)
	}
	fmt.Println("ended counting...")
}

func main() {
	deferDemo1()
	deferDemo2()
}
